package com.design.patterns.structuralModel.templateMethod;

import com.design.patterns.structuralModel.templateMethod.service.AbstractSetting;
import com.design.patterns.structuralModel.templateMethod.service.LocalSetting;
import com.design.patterns.structuralModel.templateMethod.service.NoCacheSetting;

/**
 * 模板方法
 * 目的：定义一个操作中的算法的骨架，而将一些步骤延迟到子类中，使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。
 *
 */
public class TemplateMethodMain {
    public static void main(String[] args) {
        /**
         * 这里我们新建一个模板AbstractSetting，其中有两个关于缓存的方法没有实现，我们先抽象出来
         * 当我们使用具体实现的时候  去指定要实现哪一个具体类就可以完成模板方法
         */
        /**
         * 具体实现LocalSetting（使用map做缓存）
         */
        AbstractSetting setting1 = new LocalSetting();
        System.out.println("test = " + setting1.getSetting("test"));
        System.out.println("test = " + setting1.getSetting("test"));
        /**
         * 具体实现NoCacheSetting（使用缓存）
         */
        AbstractSetting setting2 = new NoCacheSetting();
        System.out.println("autosave = " + setting2.getSetting("autosave"));
        System.out.println("autosave = " + setting2.getSetting("autosave"));
    }
}
